// $ANTLR 3.1.2 C:\\Users\\Goncalo\\Desktop\\Etxt2DBGrammar.g 2009-09-15 14:57:59

package etxt2db.query;

import etxt2db.api.ClassificationModel;
import etxt2db.api.ClassificationModelCreator;
import etxt2db.features.*;
import etxt2db.serialization.*;


import java.io.IOException;
import java.util.LinkedList;


import org.antlr.runtime.*;
import java.util.Stack;
import java.util.List;
import java.util.ArrayList;

public class Etxt2DBGrammarParser extends Parser {
    public static final String[] tokenNames = new String[] {
        "<invalid>", "<EOR>", "<DOWN>", "<UP>", "CREATE", "CLASSIFICATION", "MODEL", "AS", "GENERIC_NAME", "USING", "REGEX", "STRING", "TO", "FIND", "DICTIONARY", "HMM", "TRAINED", "WITH", "UNION", "COMMA", "CASE", "SENSITIVE", "INSENSITIVE", "MEMM", "CRF", "SVM", "CAPTURING", "FEATURES", "IN", "WINDOW", "RADIUS", "NUMBER", "CORPUS", "SUBSTRING", "FROM", "MATCH", "VALUE", "SIZE", "CHARACTER", "PATTERN", "TYPE", "CLASSIFY", "EVALUATE", "OF", "SET", "BEGIN", "TAG", "END", "DOCUMENT", "STYLE", "ONE", "PER", "LINE", "FILE", "C", "R", "E", "A", "T", "L", "S", "I", "F", "Y", "CLASSES", "V", "U", "O", "M", "N", "P", "B", "G", "D", "X", "H", "W", "Z", "PLUS", "MINUS", "LETTER", "NAMECHAR", "DIGIT", "J", "K", "Q", "WS", "'*'"
    };
    public static final int LETTER=80;
    public static final int CASE=20;
    public static final int FIND=13;
    public static final int REGEX=10;
    public static final int MEMM=23;
    public static final int ONE=50;
    public static final int CLASSES=64;
    public static final int CAPTURING=26;
    public static final int EOF=-1;
    public static final int CHARACTER=38;
    public static final int TYPE=40;
    public static final int PATTERN=39;
    public static final int AS=7;
    public static final int TRAINED=16;
    public static final int CREATE=4;
    public static final int DICTIONARY=14;
    public static final int IN=28;
    public static final int USING=9;
    public static final int DOCUMENT=48;
    public static final int HMM=15;
    public static final int COMMA=19;
    public static final int BEGIN=45;
    public static final int CLASSIFY=41;
    public static final int PLUS=78;
    public static final int MODEL=6;
    public static final int DIGIT=82;
    public static final int CORPUS=32;
    public static final int EVALUATE=42;
    public static final int WITH=17;
    public static final int D=73;
    public static final int E=56;
    public static final int F=62;
    public static final int G=72;
    public static final int A=57;
    public static final int B=71;
    public static final int C=54;
    public static final int L=59;
    public static final int TO=12;
    public static final int FEATURES=27;
    public static final int M=68;
    public static final int PER=51;
    public static final int N=69;
    public static final int O=67;
    public static final int H=75;
    public static final int I=61;
    public static final int J=83;
    public static final int K=84;
    public static final int NUMBER=31;
    public static final int U=66;
    public static final int T=58;
    public static final int W=76;
    public static final int V=65;
    public static final int SET=44;
    public static final int SENSITIVE=21;
    public static final int MATCH=35;
    public static final int Q=85;
    public static final int P=70;
    public static final int S=60;
    public static final int MINUS=79;
    public static final int R=55;
    public static final int VALUE=36;
    public static final int FILE=53;
    public static final int OF=43;
    public static final int T__87=87;
    public static final int CLASSIFICATION=5;
    public static final int LINE=52;
    public static final int GENERIC_NAME=8;
    public static final int Y=63;
    public static final int UNION=18;
    public static final int X=74;
    public static final int TAG=46;
    public static final int SUBSTRING=33;
    public static final int NAMECHAR=81;
    public static final int Z=77;
    public static final int WS=86;
    public static final int INSENSITIVE=22;
    public static final int STYLE=49;
    public static final int WINDOW=29;
    public static final int CRF=24;
    public static final int END=47;
    public static final int FROM=34;
    public static final int SIZE=37;
    public static final int RADIUS=30;
    public static final int STRING=11;
    public static final int SVM=25;

    // delegates
    // delegators


        public Etxt2DBGrammarParser(TokenStream input) {
            this(input, new RecognizerSharedState());
        }
        public Etxt2DBGrammarParser(TokenStream input, RecognizerSharedState state) {
            super(input, state);
             
        }
        

    public String[] getTokenNames() { return Etxt2DBGrammarParser.tokenNames; }
    public String getGrammarFileName() { return "C:\\Users\\Goncalo\\Desktop\\Etxt2DBGrammar.g"; }


        public static int TRAINING = 0;
        public static int CLASSIFYING = 1;
        public static int EVALUATING = 2;
        public static int SETBEGINTAG = 3;
        public static int SETENDTAG = 4;
        public static int SETDOCPERFILE = 5;
        public static int NOTHING = 6;
        public static final int EXPREG = 0;
        public static final int DICTIO = 1;
        public static final int MACLEA = 2;
        public static final int CUNION = 3;
        public static final int NOTECH = 4;
        private List<String> errors = new ArrayList<String>();
        public List<QueryInformationObject> queries = new LinkedList<QueryInformationObject>();
        private QueryInformationObject current = new QueryInformationObject();
        
        public void displayRecognitionError(String[] tokenNames,
                                            RecognitionException e) {
            String hdr = getErrorHeader(e);
            String msg = getErrorMessage(e, tokenNames);
            errors.add(hdr + " " + msg);

        }
        
        public String getErrorHeader(RecognitionException e) {
            int numLine;
            if(e.token.equals(Token.EOF_TOKEN)){
                 return "Error in the end of the file";
            }else{
                 numLine = e.token.getLine();
            }
            return "Error in line "+numLine+":"+e.token.getCharPositionInLine() + " : ";
        }

        
        public String getTokenErrorDisplay(Token t) {
        	return super.getTokenErrorDisplay(t);
        }
        
        public List<String> getErrors() {
            return errors;
        }





    // $ANTLR start "root"
    // C:\\Users\\Goncalo\\Desktop\\Etxt2DBGrammar.g:71:1: root : ( train | classify | evaluate | setBeginTag | setEndTag | setDocPerFile )+ ;
    public final void root() throws RecognitionException {
        try {
            // C:\\Users\\Goncalo\\Desktop\\Etxt2DBGrammar.g:71:7: ( ( train | classify | evaluate | setBeginTag | setEndTag | setDocPerFile )+ )
            // C:\\Users\\Goncalo\\Desktop\\Etxt2DBGrammar.g:71:9: ( train | classify | evaluate | setBeginTag | setEndTag | setDocPerFile )+
            {
            // C:\\Users\\Goncalo\\Desktop\\Etxt2DBGrammar.g:71:9: ( train | classify | evaluate | setBeginTag | setEndTag | setDocPerFile )+
            int cnt1=0;
            loop1:
            do {
                int alt1=7;
                switch ( input.LA(1) ) {
                case CREATE:
                    {
                    alt1=1;
                    }
                    break;
                case CLASSIFY:
                    {
                    alt1=2;
                    }
                    break;
                case EVALUATE:
                    {
                    alt1=3;
                    }
                    break;
                case SET:
                    {
                    switch ( input.LA(2) ) {
                    case BEGIN:
                        {
                        alt1=4;
                        }
                        break;
                    case END:
                        {
                        alt1=5;
                        }
                        break;
                    case DOCUMENT:
                        {
                        alt1=6;
                        }
                        break;

                    }

                    }
                    break;

                }

                switch (alt1) {
            	case 1 :
            	    // C:\\Users\\Goncalo\\Desktop\\Etxt2DBGrammar.g:71:10: train
            	    {
            	    pushFollow(FOLLOW_train_in_root36);
            	    train();

            	    state._fsp--;

            	    current.setAction(TRAINING);queries.add(current); current = new QueryInformationObject();

            	    }
            	    break;
            	case 2 :
            	    // C:\\Users\\Goncalo\\Desktop\\Etxt2DBGrammar.g:72:4: classify
            	    {
            	    pushFollow(FOLLOW_classify_in_root44);
            	    classify();

            	    state._fsp--;

            	    current.setAction(CLASSIFYING);queries.add(current); current = new QueryInformationObject();

            	    }
            	    break;
            	case 3 :
            	    // C:\\Users\\Goncalo\\Desktop\\Etxt2DBGrammar.g:73:4: evaluate
            	    {
            	    pushFollow(FOLLOW_evaluate_in_root52);
            	    evaluate();

            	    state._fsp--;

            	    current.setAction(EVALUATING);queries.add(current); current = new QueryInformationObject();

            	    }
            	    break;
            	case 4 :
            	    // C:\\Users\\Goncalo\\Desktop\\Etxt2DBGrammar.g:74:4: setBeginTag
            	    {
            	    pushFollow(FOLLOW_setBeginTag_in_root59);
            	    setBeginTag();

            	    state._fsp--;

            	    current.setAction(SETBEGINTAG);queries.add(current); current = new QueryInformationObject();

            	    }
            	    break;
            	case 5 :
            	    // C:\\Users\\Goncalo\\Desktop\\Etxt2DBGrammar.g:75:4: setEndTag
            	    {
            	    pushFollow(FOLLOW_setEndTag_in_root67);
            	    setEndTag();

            	    state._fsp--;

            	    current.setAction(SETENDTAG);queries.add(current); current = new QueryInformationObject();

            	    }
            	    break;
            	case 6 :
            	    // C:\\Users\\Goncalo\\Desktop\\Etxt2DBGrammar.g:76:4: setDocPerFile
            	    {
            	    pushFollow(FOLLOW_setDocPerFile_in_root74);
            	    setDocPerFile();

            	    state._fsp--;

            	    current.setAction(SETDOCPERFILE);queries.add(current); current = new QueryInformationObject();

            	    }
            	    break;

            	default :
            	    if ( cnt1 >= 1 ) break loop1;
                        EarlyExitException eee =
                            new EarlyExitException(1, input);
                        throw eee;
                }
                cnt1++;
            } while (true);


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return ;
    }
    // $ANTLR end "root"


    // $ANTLR start "train"
    // C:\\Users\\Goncalo\\Desktop\\Etxt2DBGrammar.g:79:1: train : trainHeader technique ;
    public final void train() throws RecognitionException {
        try {
            // C:\\Users\\Goncalo\\Desktop\\Etxt2DBGrammar.g:79:8: ( trainHeader technique )
            // C:\\Users\\Goncalo\\Desktop\\Etxt2DBGrammar.g:79:10: trainHeader technique
            {
            pushFollow(FOLLOW_trainHeader_in_train89);
            trainHeader();

            state._fsp--;

            pushFollow(FOLLOW_technique_in_train91);
            technique();

            state._fsp--;


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return ;
    }
    // $ANTLR end "train"


    // $ANTLR start "trainHeader"
    // C:\\Users\\Goncalo\\Desktop\\Etxt2DBGrammar.g:82:1: trainHeader : CREATE CLASSIFICATION MODEL AS GENERIC_NAME ;
    public final void trainHeader() throws RecognitionException {
        Token GENERIC_NAME1=null;

        try {
            // C:\\Users\\Goncalo\\Desktop\\Etxt2DBGrammar.g:83:2: ( CREATE CLASSIFICATION MODEL AS GENERIC_NAME )
            // C:\\Users\\Goncalo\\Desktop\\Etxt2DBGrammar.g:83:4: CREATE CLASSIFICATION MODEL AS GENERIC_NAME
            {
            match(input,CREATE,FOLLOW_CREATE_in_trainHeader103); 
            match(input,CLASSIFICATION,FOLLOW_CLASSIFICATION_in_trainHeader105); 
            match(input,MODEL,FOLLOW_MODEL_in_trainHeader107); 
            match(input,AS,FOLLOW_AS_in_trainHeader109); 
            GENERIC_NAME1=(Token)match(input,GENERIC_NAME,FOLLOW_GENERIC_NAME_in_trainHeader111); 
            current.setAnnotatorName((GENERIC_NAME1!=null?GENERIC_NAME1.getText():null));

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return ;
    }
    // $ANTLR end "trainHeader"


    // $ANTLR start "technique"
    // C:\\Users\\Goncalo\\Desktop\\Etxt2DBGrammar.g:85:1: technique : ( ( USING REGEX STRING TO FIND GENERIC_NAME ) | ( USING ( caseSelection )? DICTIONARY STRING ) | ( USING HMM TRAINED WITH STRING TO FIND listClasses ) | ( USING mlTech TRAINED WITH STRING TO FIND listClasses ( features )? ) | ( USING CLASSIFICATION MODEL UNION listClassifiers ) );
    public final void technique() throws RecognitionException {
        Token STRING2=null;
        Token GENERIC_NAME3=null;
        Token STRING4=null;
        Token STRING5=null;
        Token STRING6=null;

        try {
            // C:\\Users\\Goncalo\\Desktop\\Etxt2DBGrammar.g:86:2: ( ( USING REGEX STRING TO FIND GENERIC_NAME ) | ( USING ( caseSelection )? DICTIONARY STRING ) | ( USING HMM TRAINED WITH STRING TO FIND listClasses ) | ( USING mlTech TRAINED WITH STRING TO FIND listClasses ( features )? ) | ( USING CLASSIFICATION MODEL UNION listClassifiers ) )
            int alt4=5;
            int LA4_0 = input.LA(1);

            if ( (LA4_0==USING) ) {
                switch ( input.LA(2) ) {
                case REGEX:
                    {
                    alt4=1;
                    }
                    break;
                case HMM:
                    {
                    alt4=3;
                    }
                    break;
                case CLASSIFICATION:
                    {
                    alt4=5;
                    }
                    break;
                case MEMM:
                case CRF:
                case SVM:
                    {
                    alt4=4;
                    }
                    break;
                case DICTIONARY:
                case CASE:
                    {
                    alt4=2;
                    }
                    break;
                default:
                    NoViableAltException nvae =
                        new NoViableAltException("", 4, 1, input);

                    throw nvae;
                }

            }
            else {
                NoViableAltException nvae =
                    new NoViableAltException("", 4, 0, input);

                throw nvae;
            }
            switch (alt4) {
                case 1 :
                    // C:\\Users\\Goncalo\\Desktop\\Etxt2DBGrammar.g:86:4: ( USING REGEX STRING TO FIND GENERIC_NAME )
                    {
                    // C:\\Users\\Goncalo\\Desktop\\Etxt2DBGrammar.g:86:4: ( USING REGEX STRING TO FIND GENERIC_NAME )
                    // C:\\Users\\Goncalo\\Desktop\\Etxt2DBGrammar.g:86:5: USING REGEX STRING TO FIND GENERIC_NAME
                    {
                    match(input,USING,FOLLOW_USING_in_technique124); 
                    match(input,REGEX,FOLLOW_REGEX_in_technique126); 
                    STRING2=(Token)match(input,STRING,FOLLOW_STRING_in_technique128); 
                    match(input,TO,FOLLOW_TO_in_technique130); 
                    match(input,FIND,FOLLOW_FIND_in_technique132); 
                    GENERIC_NAME3=(Token)match(input,GENERIC_NAME,FOLLOW_GENERIC_NAME_in_technique134); 

                    }

                     current.setTechniqueUsed(EXPREG); current.setRegularExpression((STRING2!=null?STRING2.getText():null).substring(1,(STRING2!=null?STRING2.getText():null).length()-1)); current.setRegularExpressionType((GENERIC_NAME3!=null?GENERIC_NAME3.getText():null)); 

                    }
                    break;
                case 2 :
                    // C:\\Users\\Goncalo\\Desktop\\Etxt2DBGrammar.g:87:4: ( USING ( caseSelection )? DICTIONARY STRING )
                    {
                    // C:\\Users\\Goncalo\\Desktop\\Etxt2DBGrammar.g:87:4: ( USING ( caseSelection )? DICTIONARY STRING )
                    // C:\\Users\\Goncalo\\Desktop\\Etxt2DBGrammar.g:87:5: USING ( caseSelection )? DICTIONARY STRING
                    {
                    match(input,USING,FOLLOW_USING_in_technique143); 
                    // C:\\Users\\Goncalo\\Desktop\\Etxt2DBGrammar.g:87:11: ( caseSelection )?
                    int alt2=2;
                    int LA2_0 = input.LA(1);

                    if ( (LA2_0==CASE) ) {
                        alt2=1;
                    }
                    switch (alt2) {
                        case 1 :
                            // C:\\Users\\Goncalo\\Desktop\\Etxt2DBGrammar.g:87:11: caseSelection
                            {
                            pushFollow(FOLLOW_caseSelection_in_technique145);
                            caseSelection();

                            state._fsp--;


                            }
                            break;

                    }

                    match(input,DICTIONARY,FOLLOW_DICTIONARY_in_technique148); 
                    STRING4=(Token)match(input,STRING,FOLLOW_STRING_in_technique150); 

                    }

                     current.setTechniqueUsed(DICTIO); current.setDictionaryPath((STRING4!=null?STRING4.getText():null).substring(1,(STRING4!=null?STRING4.getText():null).length()-1));

                    }
                    break;
                case 3 :
                    // C:\\Users\\Goncalo\\Desktop\\Etxt2DBGrammar.g:88:4: ( USING HMM TRAINED WITH STRING TO FIND listClasses )
                    {
                    // C:\\Users\\Goncalo\\Desktop\\Etxt2DBGrammar.g:88:4: ( USING HMM TRAINED WITH STRING TO FIND listClasses )
                    // C:\\Users\\Goncalo\\Desktop\\Etxt2DBGrammar.g:88:5: USING HMM TRAINED WITH STRING TO FIND listClasses
                    {
                    match(input,USING,FOLLOW_USING_in_technique160); 
                    match(input,HMM,FOLLOW_HMM_in_technique162); 
                    match(input,TRAINED,FOLLOW_TRAINED_in_technique164); 
                    match(input,WITH,FOLLOW_WITH_in_technique166); 
                    STRING5=(Token)match(input,STRING,FOLLOW_STRING_in_technique168); 
                    match(input,TO,FOLLOW_TO_in_technique170); 
                    match(input,FIND,FOLLOW_FIND_in_technique172); 
                    pushFollow(FOLLOW_listClasses_in_technique174);
                    listClasses();

                    state._fsp--;


                    }

                     current.setTechniqueUsed(MACLEA);
                    				  current.setMachineLearningTrainingPath((STRING5!=null?STRING5.getText():null).substring(1,(STRING5!=null?STRING5.getText():null).length()-1));
                    				  current.setMachineLearningTechnique(ClassificationModelCreator.MLTechnique.HMM);

                    }
                    break;
                case 4 :
                    // C:\\Users\\Goncalo\\Desktop\\Etxt2DBGrammar.g:94:4: ( USING mlTech TRAINED WITH STRING TO FIND listClasses ( features )? )
                    {
                    // C:\\Users\\Goncalo\\Desktop\\Etxt2DBGrammar.g:94:4: ( USING mlTech TRAINED WITH STRING TO FIND listClasses ( features )? )
                    // C:\\Users\\Goncalo\\Desktop\\Etxt2DBGrammar.g:94:5: USING mlTech TRAINED WITH STRING TO FIND listClasses ( features )?
                    {
                    match(input,USING,FOLLOW_USING_in_technique191); 
                    pushFollow(FOLLOW_mlTech_in_technique193);
                    mlTech();

                    state._fsp--;

                    match(input,TRAINED,FOLLOW_TRAINED_in_technique195); 
                    match(input,WITH,FOLLOW_WITH_in_technique197); 
                    STRING6=(Token)match(input,STRING,FOLLOW_STRING_in_technique199); 
                    match(input,TO,FOLLOW_TO_in_technique201); 
                    match(input,FIND,FOLLOW_FIND_in_technique203); 
                    pushFollow(FOLLOW_listClasses_in_technique205);
                    listClasses();

                    state._fsp--;

                    // C:\\Users\\Goncalo\\Desktop\\Etxt2DBGrammar.g:94:58: ( features )?
                    int alt3=2;
                    int LA3_0 = input.LA(1);

                    if ( (LA3_0==CAPTURING) ) {
                        alt3=1;
                    }
                    switch (alt3) {
                        case 1 :
                            // C:\\Users\\Goncalo\\Desktop\\Etxt2DBGrammar.g:94:58: features
                            {
                            pushFollow(FOLLOW_features_in_technique207);
                            features();

                            state._fsp--;


                            }
                            break;

                    }


                    }

                     current.setTechniqueUsed(MACLEA);
                    				  current.setMachineLearningTrainingPath((STRING6!=null?STRING6.getText():null).substring(1,(STRING6!=null?STRING6.getText():null).length()-1));

                    }
                    break;
                case 5 :
                    // C:\\Users\\Goncalo\\Desktop\\Etxt2DBGrammar.g:97:4: ( USING CLASSIFICATION MODEL UNION listClassifiers )
                    {
                    // C:\\Users\\Goncalo\\Desktop\\Etxt2DBGrammar.g:97:4: ( USING CLASSIFICATION MODEL UNION listClassifiers )
                    // C:\\Users\\Goncalo\\Desktop\\Etxt2DBGrammar.g:97:5: USING CLASSIFICATION MODEL UNION listClassifiers
                    {
                    match(input,USING,FOLLOW_USING_in_technique221); 
                    match(input,CLASSIFICATION,FOLLOW_CLASSIFICATION_in_technique223); 
                    match(input,MODEL,FOLLOW_MODEL_in_technique225); 
                    match(input,UNION,FOLLOW_UNION_in_technique227); 
                    pushFollow(FOLLOW_listClassifiers_in_technique229);
                    listClassifiers();

                    state._fsp--;


                    }

                     current.setTechniqueUsed(CUNION);

                    }
                    break;

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return ;
    }
    // $ANTLR end "technique"


    // $ANTLR start "listClassifiers"
    // C:\\Users\\Goncalo\\Desktop\\Etxt2DBGrammar.g:99:1: listClassifiers : ( GENERIC_NAME | GENERIC_NAME COMMA listClassifiers );
    public final void listClassifiers() throws RecognitionException {
        Token GENERIC_NAME7=null;
        Token GENERIC_NAME8=null;

        try {
            // C:\\Users\\Goncalo\\Desktop\\Etxt2DBGrammar.g:100:2: ( GENERIC_NAME | GENERIC_NAME COMMA listClassifiers )
            int alt5=2;
            int LA5_0 = input.LA(1);

            if ( (LA5_0==GENERIC_NAME) ) {
                int LA5_1 = input.LA(2);

                if ( (LA5_1==COMMA) ) {
                    alt5=2;
                }
                else if ( (LA5_1==EOF||LA5_1==CREATE||(LA5_1>=CLASSIFY && LA5_1<=EVALUATE)||LA5_1==SET) ) {
                    alt5=1;
                }
                else {
                    NoViableAltException nvae =
                        new NoViableAltException("", 5, 1, input);

                    throw nvae;
                }
            }
            else {
                NoViableAltException nvae =
                    new NoViableAltException("", 5, 0, input);

                throw nvae;
            }
            switch (alt5) {
                case 1 :
                    // C:\\Users\\Goncalo\\Desktop\\Etxt2DBGrammar.g:100:4: GENERIC_NAME
                    {
                    GENERIC_NAME7=(Token)match(input,GENERIC_NAME,FOLLOW_GENERIC_NAME_in_listClassifiers242); 
                    current.addAnnotator((GENERIC_NAME7!=null?GENERIC_NAME7.getText():null));

                    }
                    break;
                case 2 :
                    // C:\\Users\\Goncalo\\Desktop\\Etxt2DBGrammar.g:101:4: GENERIC_NAME COMMA listClassifiers
                    {
                    GENERIC_NAME8=(Token)match(input,GENERIC_NAME,FOLLOW_GENERIC_NAME_in_listClassifiers252); 
                    match(input,COMMA,FOLLOW_COMMA_in_listClassifiers254); 
                    pushFollow(FOLLOW_listClassifiers_in_listClassifiers256);
                    listClassifiers();

                    state._fsp--;

                    current.addAnnotator((GENERIC_NAME8!=null?GENERIC_NAME8.getText():null));

                    }
                    break;

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return ;
    }
    // $ANTLR end "listClassifiers"


    // $ANTLR start "caseSelection"
    // C:\\Users\\Goncalo\\Desktop\\Etxt2DBGrammar.g:103:1: caseSelection : CASE ( ( SENSITIVE ) | ( INSENSITIVE ) ) ;
    public final void caseSelection() throws RecognitionException {
        try {
            // C:\\Users\\Goncalo\\Desktop\\Etxt2DBGrammar.g:104:2: ( CASE ( ( SENSITIVE ) | ( INSENSITIVE ) ) )
            // C:\\Users\\Goncalo\\Desktop\\Etxt2DBGrammar.g:104:4: CASE ( ( SENSITIVE ) | ( INSENSITIVE ) )
            {
            match(input,CASE,FOLLOW_CASE_in_caseSelection268); 
            // C:\\Users\\Goncalo\\Desktop\\Etxt2DBGrammar.g:104:9: ( ( SENSITIVE ) | ( INSENSITIVE ) )
            int alt6=2;
            int LA6_0 = input.LA(1);

            if ( (LA6_0==SENSITIVE) ) {
                alt6=1;
            }
            else if ( (LA6_0==INSENSITIVE) ) {
                alt6=2;
            }
            else {
                NoViableAltException nvae =
                    new NoViableAltException("", 6, 0, input);

                throw nvae;
            }
            switch (alt6) {
                case 1 :
                    // C:\\Users\\Goncalo\\Desktop\\Etxt2DBGrammar.g:104:10: ( SENSITIVE )
                    {
                    // C:\\Users\\Goncalo\\Desktop\\Etxt2DBGrammar.g:104:10: ( SENSITIVE )
                    // C:\\Users\\Goncalo\\Desktop\\Etxt2DBGrammar.g:104:11: SENSITIVE
                    {
                    match(input,SENSITIVE,FOLLOW_SENSITIVE_in_caseSelection272); 

                    }

                    current.setDictionaryCase(true);

                    }
                    break;
                case 2 :
                    // C:\\Users\\Goncalo\\Desktop\\Etxt2DBGrammar.g:104:58: ( INSENSITIVE )
                    {
                    // C:\\Users\\Goncalo\\Desktop\\Etxt2DBGrammar.g:104:58: ( INSENSITIVE )
                    // C:\\Users\\Goncalo\\Desktop\\Etxt2DBGrammar.g:104:59: INSENSITIVE
                    {
                    match(input,INSENSITIVE,FOLLOW_INSENSITIVE_in_caseSelection279); 

                    }

                    current.setDictionaryCase(false);

                    }
                    break;

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return ;
    }
    // $ANTLR end "caseSelection"


    // $ANTLR start "listClasses"
    // C:\\Users\\Goncalo\\Desktop\\Etxt2DBGrammar.g:106:1: listClasses : ( listNames | ( '*' ) );
    public final void listClasses() throws RecognitionException {
        try {
            // C:\\Users\\Goncalo\\Desktop\\Etxt2DBGrammar.g:107:2: ( listNames | ( '*' ) )
            int alt7=2;
            int LA7_0 = input.LA(1);

            if ( (LA7_0==GENERIC_NAME) ) {
                alt7=1;
            }
            else if ( (LA7_0==87) ) {
                alt7=2;
            }
            else {
                NoViableAltException nvae =
                    new NoViableAltException("", 7, 0, input);

                throw nvae;
            }
            switch (alt7) {
                case 1 :
                    // C:\\Users\\Goncalo\\Desktop\\Etxt2DBGrammar.g:107:4: listNames
                    {
                    pushFollow(FOLLOW_listNames_in_listClasses292);
                    listNames();

                    state._fsp--;


                    }
                    break;
                case 2 :
                    // C:\\Users\\Goncalo\\Desktop\\Etxt2DBGrammar.g:108:4: ( '*' )
                    {
                    // C:\\Users\\Goncalo\\Desktop\\Etxt2DBGrammar.g:108:4: ( '*' )
                    // C:\\Users\\Goncalo\\Desktop\\Etxt2DBGrammar.g:108:5: '*'
                    {
                    match(input,87,FOLLOW_87_in_listClasses298); 

                    }

                    current.setTypesList(null);

                    }
                    break;

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return ;
    }
    // $ANTLR end "listClasses"


    // $ANTLR start "listNames"
    // C:\\Users\\Goncalo\\Desktop\\Etxt2DBGrammar.g:110:1: listNames : ( GENERIC_NAME | GENERIC_NAME COMMA listNames );
    public final void listNames() throws RecognitionException {
        Token GENERIC_NAME9=null;
        Token GENERIC_NAME10=null;

        try {
            // C:\\Users\\Goncalo\\Desktop\\Etxt2DBGrammar.g:111:2: ( GENERIC_NAME | GENERIC_NAME COMMA listNames )
            int alt8=2;
            int LA8_0 = input.LA(1);

            if ( (LA8_0==GENERIC_NAME) ) {
                int LA8_1 = input.LA(2);

                if ( (LA8_1==COMMA) ) {
                    alt8=2;
                }
                else if ( (LA8_1==EOF||LA8_1==CREATE||LA8_1==CAPTURING||LA8_1==FROM||(LA8_1>=CLASSIFY && LA8_1<=EVALUATE)||LA8_1==SET) ) {
                    alt8=1;
                }
                else {
                    NoViableAltException nvae =
                        new NoViableAltException("", 8, 1, input);

                    throw nvae;
                }
            }
            else {
                NoViableAltException nvae =
                    new NoViableAltException("", 8, 0, input);

                throw nvae;
            }
            switch (alt8) {
                case 1 :
                    // C:\\Users\\Goncalo\\Desktop\\Etxt2DBGrammar.g:111:4: GENERIC_NAME
                    {
                    GENERIC_NAME9=(Token)match(input,GENERIC_NAME,FOLLOW_GENERIC_NAME_in_listNames312); 
                    current.addType((GENERIC_NAME9!=null?GENERIC_NAME9.getText():null));

                    }
                    break;
                case 2 :
                    // C:\\Users\\Goncalo\\Desktop\\Etxt2DBGrammar.g:112:4: GENERIC_NAME COMMA listNames
                    {
                    GENERIC_NAME10=(Token)match(input,GENERIC_NAME,FOLLOW_GENERIC_NAME_in_listNames321); 
                    match(input,COMMA,FOLLOW_COMMA_in_listNames323); 
                    pushFollow(FOLLOW_listNames_in_listNames325);
                    listNames();

                    state._fsp--;

                    current.addType((GENERIC_NAME10!=null?GENERIC_NAME10.getText():null));

                    }
                    break;

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return ;
    }
    // $ANTLR end "listNames"


    // $ANTLR start "mlTech"
    // C:\\Users\\Goncalo\\Desktop\\Etxt2DBGrammar.g:114:1: mlTech : ( MEMM | CRF | SVM );
    public final void mlTech() throws RecognitionException {
        try {
            // C:\\Users\\Goncalo\\Desktop\\Etxt2DBGrammar.g:114:8: ( MEMM | CRF | SVM )
            int alt9=3;
            switch ( input.LA(1) ) {
            case MEMM:
                {
                alt9=1;
                }
                break;
            case CRF:
                {
                alt9=2;
                }
                break;
            case SVM:
                {
                alt9=3;
                }
                break;
            default:
                NoViableAltException nvae =
                    new NoViableAltException("", 9, 0, input);

                throw nvae;
            }

            switch (alt9) {
                case 1 :
                    // C:\\Users\\Goncalo\\Desktop\\Etxt2DBGrammar.g:114:10: MEMM
                    {
                    match(input,MEMM,FOLLOW_MEMM_in_mlTech338); 
                    current.setMachineLearningTechnique(ClassificationModelCreator.MLTechnique.MEMM);

                    }
                    break;
                case 2 :
                    // C:\\Users\\Goncalo\\Desktop\\Etxt2DBGrammar.g:115:4: CRF
                    {
                    match(input,CRF,FOLLOW_CRF_in_mlTech348); 
                    current.setMachineLearningTechnique(ClassificationModelCreator.MLTechnique.CRF);

                    }
                    break;
                case 3 :
                    // C:\\Users\\Goncalo\\Desktop\\Etxt2DBGrammar.g:116:4: SVM
                    {
                    match(input,SVM,FOLLOW_SVM_in_mlTech358); 
                    current.setMachineLearningTechnique(ClassificationModelCreator.MLTechnique.SVM);

                    }
                    break;

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return ;
    }
    // $ANTLR end "mlTech"


    // $ANTLR start "features"
    // C:\\Users\\Goncalo\\Desktop\\Etxt2DBGrammar.g:118:1: features : CAPTURING FEATURES listFeatures ( IN WINDOW WITH RADIUS NUMBER )? ;
    public final void features() throws RecognitionException {
        Token NUMBER11=null;

        try {
            // C:\\Users\\Goncalo\\Desktop\\Etxt2DBGrammar.g:118:9: ( CAPTURING FEATURES listFeatures ( IN WINDOW WITH RADIUS NUMBER )? )
            // C:\\Users\\Goncalo\\Desktop\\Etxt2DBGrammar.g:118:11: CAPTURING FEATURES listFeatures ( IN WINDOW WITH RADIUS NUMBER )?
            {
            match(input,CAPTURING,FOLLOW_CAPTURING_in_features370); 
            match(input,FEATURES,FOLLOW_FEATURES_in_features372); 
            pushFollow(FOLLOW_listFeatures_in_features374);
            listFeatures();

            state._fsp--;

            // C:\\Users\\Goncalo\\Desktop\\Etxt2DBGrammar.g:118:43: ( IN WINDOW WITH RADIUS NUMBER )?
            int alt10=2;
            int LA10_0 = input.LA(1);

            if ( (LA10_0==IN) ) {
                alt10=1;
            }
            switch (alt10) {
                case 1 :
                    // C:\\Users\\Goncalo\\Desktop\\Etxt2DBGrammar.g:118:44: IN WINDOW WITH RADIUS NUMBER
                    {
                    match(input,IN,FOLLOW_IN_in_features377); 
                    match(input,WINDOW,FOLLOW_WINDOW_in_features379); 
                    match(input,WITH,FOLLOW_WITH_in_features381); 
                    match(input,RADIUS,FOLLOW_RADIUS_in_features383); 
                    NUMBER11=(Token)match(input,NUMBER,FOLLOW_NUMBER_in_features385); 

                    }
                    break;

            }

            if(NUMBER11!=null){
            											current.setFeaturesWindow(Integer.parseInt((NUMBER11!=null?NUMBER11.getText():null)));
            										  }

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return ;
    }
    // $ANTLR end "features"


    // $ANTLR start "listFeatures"
    // C:\\Users\\Goncalo\\Desktop\\Etxt2DBGrammar.g:122:1: listFeatures : ( feature | feature COMMA listFeatures );
    public final void listFeatures() throws RecognitionException {
        try {
            // C:\\Users\\Goncalo\\Desktop\\Etxt2DBGrammar.g:123:2: ( feature | feature COMMA listFeatures )
            int alt11=2;
            alt11 = dfa11.predict(input);
            switch (alt11) {
                case 1 :
                    // C:\\Users\\Goncalo\\Desktop\\Etxt2DBGrammar.g:123:4: feature
                    {
                    pushFollow(FOLLOW_feature_in_listFeatures399);
                    feature();

                    state._fsp--;


                    }
                    break;
                case 2 :
                    // C:\\Users\\Goncalo\\Desktop\\Etxt2DBGrammar.g:124:4: feature COMMA listFeatures
                    {
                    pushFollow(FOLLOW_feature_in_listFeatures411);
                    feature();

                    state._fsp--;

                    match(input,COMMA,FOLLOW_COMMA_in_listFeatures413); 
                    pushFollow(FOLLOW_listFeatures_in_listFeatures415);
                    listFeatures();

                    state._fsp--;


                    }
                    break;

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return ;
    }
    // $ANTLR end "listFeatures"


    // $ANTLR start "feature"
    // C:\\Users\\Goncalo\\Desktop\\Etxt2DBGrammar.g:126:1: feature : ( CLASSIFICATION MODEL GENERIC_NAME | CORPUS CLASSIFICATION GENERIC_NAME | SUBSTRING FROM n1= NUMBER TO n2= NUMBER | DICTIONARY STRING | MATCH STRING | CASE SENSITIVE VALUE | CASE INSENSITIVE VALUE | SIZE | CHARACTER PATTERN | CHARACTER TYPE );
    public final void feature() throws RecognitionException {
        Token n1=null;
        Token n2=null;
        Token GENERIC_NAME12=null;
        Token GENERIC_NAME13=null;
        Token STRING14=null;
        Token STRING15=null;

        try {
            // C:\\Users\\Goncalo\\Desktop\\Etxt2DBGrammar.g:126:9: ( CLASSIFICATION MODEL GENERIC_NAME | CORPUS CLASSIFICATION GENERIC_NAME | SUBSTRING FROM n1= NUMBER TO n2= NUMBER | DICTIONARY STRING | MATCH STRING | CASE SENSITIVE VALUE | CASE INSENSITIVE VALUE | SIZE | CHARACTER PATTERN | CHARACTER TYPE )
            int alt12=10;
            alt12 = dfa12.predict(input);
            switch (alt12) {
                case 1 :
                    // C:\\Users\\Goncalo\\Desktop\\Etxt2DBGrammar.g:126:11: CLASSIFICATION MODEL GENERIC_NAME
                    {
                    match(input,CLASSIFICATION,FOLLOW_CLASSIFICATION_in_feature424); 
                    match(input,MODEL,FOLLOW_MODEL_in_feature426); 
                    GENERIC_NAME12=(Token)match(input,GENERIC_NAME,FOLLOW_GENERIC_NAME_in_feature428); 

                    				if(current.getFeaturesList() == null){
                    					current.setFeaturesList(new ArrayList<CharacterFeatureClassifier>());
                    				}
                    				String annotatorName = (GENERIC_NAME12!=null?GENERIC_NAME12.getText():null) + ".ann";
                    				String annotatorPath = "./annotators/"+annotatorName;
                    				ClassificationModelSerializer serial = new ClassificationModelSerializer();
                    				ClassificationModel annot = serial.deserializeClassificationModel(annotatorPath);
                    				current.addFeature(new ClassificationModelFeatureClassifier(annot,(GENERIC_NAME12!=null?GENERIC_NAME12.getText():null)));
                    			

                    }
                    break;
                case 2 :
                    // C:\\Users\\Goncalo\\Desktop\\Etxt2DBGrammar.g:137:4: CORPUS CLASSIFICATION GENERIC_NAME
                    {
                    match(input,CORPUS,FOLLOW_CORPUS_in_feature438); 
                    match(input,CLASSIFICATION,FOLLOW_CLASSIFICATION_in_feature440); 
                    GENERIC_NAME13=(Token)match(input,GENERIC_NAME,FOLLOW_GENERIC_NAME_in_feature442); 

                    				if(current.getFeaturesList() == null){
                    					current.setFeaturesList(new ArrayList<CharacterFeatureClassifier>());
                    				}
                    				current.addFeature(new ClassifiedDocumentFeatureClassifier((GENERIC_NAME13!=null?GENERIC_NAME13.getText():null)));
                    			

                    }
                    break;
                case 3 :
                    // C:\\Users\\Goncalo\\Desktop\\Etxt2DBGrammar.g:144:4: SUBSTRING FROM n1= NUMBER TO n2= NUMBER
                    {
                    match(input,SUBSTRING,FOLLOW_SUBSTRING_in_feature452); 
                    match(input,FROM,FOLLOW_FROM_in_feature454); 
                    n1=(Token)match(input,NUMBER,FOLLOW_NUMBER_in_feature458); 
                    match(input,TO,FOLLOW_TO_in_feature460); 
                    n2=(Token)match(input,NUMBER,FOLLOW_NUMBER_in_feature464); 

                    				if(current.getFeaturesList() == null){
                    					current.setFeaturesList(new ArrayList<CharacterFeatureClassifier>());
                    				}
                    				current.addFeature(new SubstringFeatureClassifier(Integer.parseInt((n1!=null?n1.getText():null)),
                    				                                                Integer.parseInt((n2!=null?n2.getText():null))));
                    			

                    }
                    break;
                case 4 :
                    // C:\\Users\\Goncalo\\Desktop\\Etxt2DBGrammar.g:152:4: DICTIONARY STRING
                    {
                    match(input,DICTIONARY,FOLLOW_DICTIONARY_in_feature477); 
                    STRING14=(Token)match(input,STRING,FOLLOW_STRING_in_feature479); 

                    				if(current.getFeaturesList() == null){
                    					current.setFeaturesList(new ArrayList<CharacterFeatureClassifier>());
                    				}
                    				try {
                    					current.addFeature(new DictionaryFeatureClassifier((STRING14!=null?STRING14.getText():null).substring(1,(STRING14!=null?STRING14.getText():null).length()-1)));
                    				}catch(IOException e){
                    				
                    				}
                    			

                    }
                    break;
                case 5 :
                    // C:\\Users\\Goncalo\\Desktop\\Etxt2DBGrammar.g:163:4: MATCH STRING
                    {
                    match(input,MATCH,FOLLOW_MATCH_in_feature492); 
                    STRING15=(Token)match(input,STRING,FOLLOW_STRING_in_feature494); 

                    				if(current.getFeaturesList() == null){
                    					current.setFeaturesList(new ArrayList<CharacterFeatureClassifier>());
                    				}
                    				current.addFeature(new RegexFeatureClassifier((STRING15!=null?STRING15.getText():null).substring(1,(STRING15!=null?STRING15.getText():null).length()-1)));
                    			

                    }
                    break;
                case 6 :
                    // C:\\Users\\Goncalo\\Desktop\\Etxt2DBGrammar.g:170:4: CASE SENSITIVE VALUE
                    {
                    match(input,CASE,FOLLOW_CASE_in_feature508); 
                    match(input,SENSITIVE,FOLLOW_SENSITIVE_in_feature510); 
                    match(input,VALUE,FOLLOW_VALUE_in_feature512); 

                    				if(current.getFeaturesList() == null){
                    					current.setFeaturesList(new ArrayList<CharacterFeatureClassifier>());
                    				}
                    				current.addFeature(new ValueCaseSensitiveFeatureClassifier());
                    			

                    }
                    break;
                case 7 :
                    // C:\\Users\\Goncalo\\Desktop\\Etxt2DBGrammar.g:177:4: CASE INSENSITIVE VALUE
                    {
                    match(input,CASE,FOLLOW_CASE_in_feature527); 
                    match(input,INSENSITIVE,FOLLOW_INSENSITIVE_in_feature529); 
                    match(input,VALUE,FOLLOW_VALUE_in_feature531); 

                    				if(current.getFeaturesList() == null){
                    					current.setFeaturesList(new ArrayList<CharacterFeatureClassifier>());
                    				}
                    				current.addFeature(new ValueCaseInsensitiveFeatureClassifier());
                    			

                    }
                    break;
                case 8 :
                    // C:\\Users\\Goncalo\\Desktop\\Etxt2DBGrammar.g:184:4: SIZE
                    {
                    match(input,SIZE,FOLLOW_SIZE_in_feature546); 

                    				if(current.getFeaturesList() == null){
                    					current.setFeaturesList(new ArrayList<CharacterFeatureClassifier>());
                    				}
                    				current.addFeature(new SizeFeatureClassifier());
                    			

                    }
                    break;
                case 9 :
                    // C:\\Users\\Goncalo\\Desktop\\Etxt2DBGrammar.g:191:4: CHARACTER PATTERN
                    {
                    match(input,CHARACTER,FOLLOW_CHARACTER_in_feature563); 
                    match(input,PATTERN,FOLLOW_PATTERN_in_feature565); 

                    				if(current.getFeaturesList() == null){
                    					current.setFeaturesList(new ArrayList<CharacterFeatureClassifier>());
                    				}
                    				current.addFeature(new PatternFeatureClassifier());
                    			

                    }
                    break;
                case 10 :
                    // C:\\Users\\Goncalo\\Desktop\\Etxt2DBGrammar.g:198:4: CHARACTER TYPE
                    {
                    match(input,CHARACTER,FOLLOW_CHARACTER_in_feature580); 
                    match(input,TYPE,FOLLOW_TYPE_in_feature582); 

                    				if(current.getFeaturesList() == null){
                    					current.setFeaturesList(new ArrayList<CharacterFeatureClassifier>());
                    				}
                    				current.addFeature(new CharacterTypeFeatureClassifier());
                    			

                    }
                    break;

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return ;
    }
    // $ANTLR end "feature"


    // $ANTLR start "classify"
    // C:\\Users\\Goncalo\\Desktop\\Etxt2DBGrammar.g:207:1: classify : CLASSIFY listClasses FROM STRING USING GENERIC_NAME ;
    public final void classify() throws RecognitionException {
        Token GENERIC_NAME16=null;
        Token STRING17=null;

        try {
            // C:\\Users\\Goncalo\\Desktop\\Etxt2DBGrammar.g:207:9: ( CLASSIFY listClasses FROM STRING USING GENERIC_NAME )
            // C:\\Users\\Goncalo\\Desktop\\Etxt2DBGrammar.g:207:11: CLASSIFY listClasses FROM STRING USING GENERIC_NAME
            {
            match(input,CLASSIFY,FOLLOW_CLASSIFY_in_classify603); 
            pushFollow(FOLLOW_listClasses_in_classify605);
            listClasses();

            state._fsp--;

            match(input,FROM,FOLLOW_FROM_in_classify609); 
            STRING17=(Token)match(input,STRING,FOLLOW_STRING_in_classify611); 
            match(input,USING,FOLLOW_USING_in_classify615); 
            GENERIC_NAME16=(Token)match(input,GENERIC_NAME,FOLLOW_GENERIC_NAME_in_classify617); 
            current.setAnnotatorName((GENERIC_NAME16!=null?GENERIC_NAME16.getText():null)); current.setTestingFile((STRING17!=null?STRING17.getText():null).substring(1,(STRING17!=null?STRING17.getText():null).length()-1));

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return ;
    }
    // $ANTLR end "classify"


    // $ANTLR start "evaluate"
    // C:\\Users\\Goncalo\\Desktop\\Etxt2DBGrammar.g:211:1: evaluate : EVALUATE CLASSIFICATION OF listClasses FROM STRING USING GENERIC_NAME ;
    public final void evaluate() throws RecognitionException {
        Token GENERIC_NAME18=null;
        Token STRING19=null;

        try {
            // C:\\Users\\Goncalo\\Desktop\\Etxt2DBGrammar.g:211:9: ( EVALUATE CLASSIFICATION OF listClasses FROM STRING USING GENERIC_NAME )
            // C:\\Users\\Goncalo\\Desktop\\Etxt2DBGrammar.g:211:11: EVALUATE CLASSIFICATION OF listClasses FROM STRING USING GENERIC_NAME
            {
            match(input,EVALUATE,FOLLOW_EVALUATE_in_evaluate627); 
            match(input,CLASSIFICATION,FOLLOW_CLASSIFICATION_in_evaluate629); 
            match(input,OF,FOLLOW_OF_in_evaluate631); 
            pushFollow(FOLLOW_listClasses_in_evaluate633);
            listClasses();

            state._fsp--;

            match(input,FROM,FOLLOW_FROM_in_evaluate637); 
            STRING19=(Token)match(input,STRING,FOLLOW_STRING_in_evaluate639); 
            match(input,USING,FOLLOW_USING_in_evaluate643); 
            GENERIC_NAME18=(Token)match(input,GENERIC_NAME,FOLLOW_GENERIC_NAME_in_evaluate645); 
            current.setAnnotatorName((GENERIC_NAME18!=null?GENERIC_NAME18.getText():null)); current.setTestingFile((STRING19!=null?STRING19.getText():null).substring(1,(STRING19!=null?STRING19.getText():null).length()-1));

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return ;
    }
    // $ANTLR end "evaluate"


    // $ANTLR start "setBeginTag"
    // C:\\Users\\Goncalo\\Desktop\\Etxt2DBGrammar.g:215:1: setBeginTag : SET BEGIN TAG STRING ;
    public final void setBeginTag() throws RecognitionException {
        Token STRING20=null;

        try {
            // C:\\Users\\Goncalo\\Desktop\\Etxt2DBGrammar.g:216:2: ( SET BEGIN TAG STRING )
            // C:\\Users\\Goncalo\\Desktop\\Etxt2DBGrammar.g:216:4: SET BEGIN TAG STRING
            {
            match(input,SET,FOLLOW_SET_in_setBeginTag658); 
            match(input,BEGIN,FOLLOW_BEGIN_in_setBeginTag660); 
            match(input,TAG,FOLLOW_TAG_in_setBeginTag662); 
            STRING20=(Token)match(input,STRING,FOLLOW_STRING_in_setBeginTag664); 
            current.setBeginTag((STRING20!=null?STRING20.getText():null).substring(1,(STRING20!=null?STRING20.getText():null).length()-1));

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return ;
    }
    // $ANTLR end "setBeginTag"


    // $ANTLR start "setEndTag"
    // C:\\Users\\Goncalo\\Desktop\\Etxt2DBGrammar.g:218:1: setEndTag : SET END TAG STRING ;
    public final void setEndTag() throws RecognitionException {
        Token STRING21=null;

        try {
            // C:\\Users\\Goncalo\\Desktop\\Etxt2DBGrammar.g:219:2: ( SET END TAG STRING )
            // C:\\Users\\Goncalo\\Desktop\\Etxt2DBGrammar.g:219:4: SET END TAG STRING
            {
            match(input,SET,FOLLOW_SET_in_setEndTag676); 
            match(input,END,FOLLOW_END_in_setEndTag678); 
            match(input,TAG,FOLLOW_TAG_in_setEndTag680); 
            STRING21=(Token)match(input,STRING,FOLLOW_STRING_in_setEndTag682); 
            current.setEndTag((STRING21!=null?STRING21.getText():null).substring(1,(STRING21!=null?STRING21.getText():null).length()-1));

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return ;
    }
    // $ANTLR end "setEndTag"


    // $ANTLR start "setDocPerFile"
    // C:\\Users\\Goncalo\\Desktop\\Etxt2DBGrammar.g:221:1: setDocPerFile : SET DOCUMENT STYLE documentStyle ;
    public final void setDocPerFile() throws RecognitionException {
        try {
            // C:\\Users\\Goncalo\\Desktop\\Etxt2DBGrammar.g:222:2: ( SET DOCUMENT STYLE documentStyle )
            // C:\\Users\\Goncalo\\Desktop\\Etxt2DBGrammar.g:222:4: SET DOCUMENT STYLE documentStyle
            {
            match(input,SET,FOLLOW_SET_in_setDocPerFile694); 
            match(input,DOCUMENT,FOLLOW_DOCUMENT_in_setDocPerFile696); 
            match(input,STYLE,FOLLOW_STYLE_in_setDocPerFile698); 
            pushFollow(FOLLOW_documentStyle_in_setDocPerFile700);
            documentStyle();

            state._fsp--;


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return ;
    }
    // $ANTLR end "setDocPerFile"


    // $ANTLR start "documentStyle"
    // C:\\Users\\Goncalo\\Desktop\\Etxt2DBGrammar.g:224:1: documentStyle : ( ONE DOCUMENT PER LINE | ONE DOCUMENT PER FILE );
    public final void documentStyle() throws RecognitionException {
        try {
            // C:\\Users\\Goncalo\\Desktop\\Etxt2DBGrammar.g:225:2: ( ONE DOCUMENT PER LINE | ONE DOCUMENT PER FILE )
            int alt13=2;
            int LA13_0 = input.LA(1);

            if ( (LA13_0==ONE) ) {
                int LA13_1 = input.LA(2);

                if ( (LA13_1==DOCUMENT) ) {
                    int LA13_2 = input.LA(3);

                    if ( (LA13_2==PER) ) {
                        int LA13_3 = input.LA(4);

                        if ( (LA13_3==LINE) ) {
                            alt13=1;
                        }
                        else if ( (LA13_3==FILE) ) {
                            alt13=2;
                        }
                        else {
                            NoViableAltException nvae =
                                new NoViableAltException("", 13, 3, input);

                            throw nvae;
                        }
                    }
                    else {
                        NoViableAltException nvae =
                            new NoViableAltException("", 13, 2, input);

                        throw nvae;
                    }
                }
                else {
                    NoViableAltException nvae =
                        new NoViableAltException("", 13, 1, input);

                    throw nvae;
                }
            }
            else {
                NoViableAltException nvae =
                    new NoViableAltException("", 13, 0, input);

                throw nvae;
            }
            switch (alt13) {
                case 1 :
                    // C:\\Users\\Goncalo\\Desktop\\Etxt2DBGrammar.g:225:4: ONE DOCUMENT PER LINE
                    {
                    match(input,ONE,FOLLOW_ONE_in_documentStyle710); 
                    match(input,DOCUMENT,FOLLOW_DOCUMENT_in_documentStyle712); 
                    match(input,PER,FOLLOW_PER_in_documentStyle714); 
                    match(input,LINE,FOLLOW_LINE_in_documentStyle716); 
                    current.setDocPerFile(false);

                    }
                    break;
                case 2 :
                    // C:\\Users\\Goncalo\\Desktop\\Etxt2DBGrammar.g:226:4: ONE DOCUMENT PER FILE
                    {
                    match(input,ONE,FOLLOW_ONE_in_documentStyle723); 
                    match(input,DOCUMENT,FOLLOW_DOCUMENT_in_documentStyle725); 
                    match(input,PER,FOLLOW_PER_in_documentStyle727); 
                    match(input,FILE,FOLLOW_FILE_in_documentStyle729); 
                    current.setDocPerFile(true);

                    }
                    break;

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return ;
    }
    // $ANTLR end "documentStyle"

    // Delegated rules


    protected DFA11 dfa11 = new DFA11(this);
    protected DFA12 dfa12 = new DFA12(this);
    static final String DFA11_eotS =
        "\33\uffff";
    static final String DFA11_eofS =
        "\7\uffff\1\21\4\uffff\2\21\4\uffff\4\21\1\uffff\2\21\1\uffff\1"+
        "\21";
    static final String DFA11_minS =
        "\1\5\1\6\1\5\1\42\2\13\1\25\1\4\1\47\2\10\1\37\2\4\2\44\2\uffff"+
        "\4\4\1\14\2\4\1\37\1\4";
    static final String DFA11_maxS =
        "\1\46\1\6\1\5\1\42\2\13\1\26\1\54\1\50\2\10\1\37\2\54\2\44\2\uffff"+
        "\4\54\1\14\2\54\1\37\1\54";
    static final String DFA11_acceptS =
        "\20\uffff\1\2\1\1\11\uffff";
    static final String DFA11_specialS =
        "\33\uffff}>";
    static final String[] DFA11_transitionS = {
            "\1\1\10\uffff\1\4\5\uffff\1\6\13\uffff\1\2\1\3\1\uffff\1\5"+
            "\1\uffff\1\7\1\10",
            "\1\11",
            "\1\12",
            "\1\13",
            "\1\14",
            "\1\15",
            "\1\16\1\17",
            "\1\21\16\uffff\1\20\10\uffff\1\21\14\uffff\2\21\1\uffff\1"+
            "\21",
            "\1\22\1\23",
            "\1\24",
            "\1\25",
            "\1\26",
            "\1\21\16\uffff\1\20\10\uffff\1\21\14\uffff\2\21\1\uffff\1"+
            "\21",
            "\1\21\16\uffff\1\20\10\uffff\1\21\14\uffff\2\21\1\uffff\1"+
            "\21",
            "\1\27",
            "\1\30",
            "",
            "",
            "\1\21\16\uffff\1\20\10\uffff\1\21\14\uffff\2\21\1\uffff\1"+
            "\21",
            "\1\21\16\uffff\1\20\10\uffff\1\21\14\uffff\2\21\1\uffff\1"+
            "\21",
            "\1\21\16\uffff\1\20\10\uffff\1\21\14\uffff\2\21\1\uffff\1"+
            "\21",
            "\1\21\16\uffff\1\20\10\uffff\1\21\14\uffff\2\21\1\uffff\1"+
            "\21",
            "\1\31",
            "\1\21\16\uffff\1\20\10\uffff\1\21\14\uffff\2\21\1\uffff\1"+
            "\21",
            "\1\21\16\uffff\1\20\10\uffff\1\21\14\uffff\2\21\1\uffff\1"+
            "\21",
            "\1\32",
            "\1\21\16\uffff\1\20\10\uffff\1\21\14\uffff\2\21\1\uffff\1"+
            "\21"
    };

    static final short[] DFA11_eot = DFA.unpackEncodedString(DFA11_eotS);
    static final short[] DFA11_eof = DFA.unpackEncodedString(DFA11_eofS);
    static final char[] DFA11_min = DFA.unpackEncodedStringToUnsignedChars(DFA11_minS);
    static final char[] DFA11_max = DFA.unpackEncodedStringToUnsignedChars(DFA11_maxS);
    static final short[] DFA11_accept = DFA.unpackEncodedString(DFA11_acceptS);
    static final short[] DFA11_special = DFA.unpackEncodedString(DFA11_specialS);
    static final short[][] DFA11_transition;

    static {
        int numStates = DFA11_transitionS.length;
        DFA11_transition = new short[numStates][];
        for (int i=0; i<numStates; i++) {
            DFA11_transition[i] = DFA.unpackEncodedString(DFA11_transitionS[i]);
        }
    }

    class DFA11 extends DFA {

        public DFA11(BaseRecognizer recognizer) {
            this.recognizer = recognizer;
            this.decisionNumber = 11;
            this.eot = DFA11_eot;
            this.eof = DFA11_eof;
            this.min = DFA11_min;
            this.max = DFA11_max;
            this.accept = DFA11_accept;
            this.special = DFA11_special;
            this.transition = DFA11_transition;
        }
        public String getDescription() {
            return "122:1: listFeatures : ( feature | feature COMMA listFeatures );";
        }
    }
    static final String DFA12_eotS =
        "\15\uffff";
    static final String DFA12_eofS =
        "\15\uffff";
    static final String DFA12_minS =
        "\1\5\5\uffff\1\25\1\uffff\1\47\4\uffff";
    static final String DFA12_maxS =
        "\1\46\5\uffff\1\26\1\uffff\1\50\4\uffff";
    static final String DFA12_acceptS =
        "\1\uffff\1\1\1\2\1\3\1\4\1\5\1\uffff\1\10\1\uffff\1\6\1\7\1\11"+
        "\1\12";
    static final String DFA12_specialS =
        "\15\uffff}>";
    static final String[] DFA12_transitionS = {
            "\1\1\10\uffff\1\4\5\uffff\1\6\13\uffff\1\2\1\3\1\uffff\1\5"+
            "\1\uffff\1\7\1\10",
            "",
            "",
            "",
            "",
            "",
            "\1\11\1\12",
            "",
            "\1\13\1\14",
            "",
            "",
            "",
            ""
    };

    static final short[] DFA12_eot = DFA.unpackEncodedString(DFA12_eotS);
    static final short[] DFA12_eof = DFA.unpackEncodedString(DFA12_eofS);
    static final char[] DFA12_min = DFA.unpackEncodedStringToUnsignedChars(DFA12_minS);
    static final char[] DFA12_max = DFA.unpackEncodedStringToUnsignedChars(DFA12_maxS);
    static final short[] DFA12_accept = DFA.unpackEncodedString(DFA12_acceptS);
    static final short[] DFA12_special = DFA.unpackEncodedString(DFA12_specialS);
    static final short[][] DFA12_transition;

    static {
        int numStates = DFA12_transitionS.length;
        DFA12_transition = new short[numStates][];
        for (int i=0; i<numStates; i++) {
            DFA12_transition[i] = DFA.unpackEncodedString(DFA12_transitionS[i]);
        }
    }

    class DFA12 extends DFA {

        public DFA12(BaseRecognizer recognizer) {
            this.recognizer = recognizer;
            this.decisionNumber = 12;
            this.eot = DFA12_eot;
            this.eof = DFA12_eof;
            this.min = DFA12_min;
            this.max = DFA12_max;
            this.accept = DFA12_accept;
            this.special = DFA12_special;
            this.transition = DFA12_transition;
        }
        public String getDescription() {
            return "126:1: feature : ( CLASSIFICATION MODEL GENERIC_NAME | CORPUS CLASSIFICATION GENERIC_NAME | SUBSTRING FROM n1= NUMBER TO n2= NUMBER | DICTIONARY STRING | MATCH STRING | CASE SENSITIVE VALUE | CASE INSENSITIVE VALUE | SIZE | CHARACTER PATTERN | CHARACTER TYPE );";
        }
    }
 

    public static final BitSet FOLLOW_train_in_root36 = new BitSet(new long[]{0x0000160000000012L});
    public static final BitSet FOLLOW_classify_in_root44 = new BitSet(new long[]{0x0000160000000012L});
    public static final BitSet FOLLOW_evaluate_in_root52 = new BitSet(new long[]{0x0000160000000012L});
    public static final BitSet FOLLOW_setBeginTag_in_root59 = new BitSet(new long[]{0x0000160000000012L});
    public static final BitSet FOLLOW_setEndTag_in_root67 = new BitSet(new long[]{0x0000160000000012L});
    public static final BitSet FOLLOW_setDocPerFile_in_root74 = new BitSet(new long[]{0x0000160000000012L});
    public static final BitSet FOLLOW_trainHeader_in_train89 = new BitSet(new long[]{0x0000000000000200L});
    public static final BitSet FOLLOW_technique_in_train91 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_CREATE_in_trainHeader103 = new BitSet(new long[]{0x0000000000000020L});
    public static final BitSet FOLLOW_CLASSIFICATION_in_trainHeader105 = new BitSet(new long[]{0x0000000000000040L});
    public static final BitSet FOLLOW_MODEL_in_trainHeader107 = new BitSet(new long[]{0x0000000000000080L});
    public static final BitSet FOLLOW_AS_in_trainHeader109 = new BitSet(new long[]{0x0000000000000100L});
    public static final BitSet FOLLOW_GENERIC_NAME_in_trainHeader111 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_USING_in_technique124 = new BitSet(new long[]{0x0000000000000400L});
    public static final BitSet FOLLOW_REGEX_in_technique126 = new BitSet(new long[]{0x0000000000000800L});
    public static final BitSet FOLLOW_STRING_in_technique128 = new BitSet(new long[]{0x0000000000001000L});
    public static final BitSet FOLLOW_TO_in_technique130 = new BitSet(new long[]{0x0000000000002000L});
    public static final BitSet FOLLOW_FIND_in_technique132 = new BitSet(new long[]{0x0000000000000100L});
    public static final BitSet FOLLOW_GENERIC_NAME_in_technique134 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_USING_in_technique143 = new BitSet(new long[]{0x0000000000104000L});
    public static final BitSet FOLLOW_caseSelection_in_technique145 = new BitSet(new long[]{0x0000000000004000L});
    public static final BitSet FOLLOW_DICTIONARY_in_technique148 = new BitSet(new long[]{0x0000000000000800L});
    public static final BitSet FOLLOW_STRING_in_technique150 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_USING_in_technique160 = new BitSet(new long[]{0x0000000000008000L});
    public static final BitSet FOLLOW_HMM_in_technique162 = new BitSet(new long[]{0x0000000000010000L});
    public static final BitSet FOLLOW_TRAINED_in_technique164 = new BitSet(new long[]{0x0000000000020000L});
    public static final BitSet FOLLOW_WITH_in_technique166 = new BitSet(new long[]{0x0000000000000800L});
    public static final BitSet FOLLOW_STRING_in_technique168 = new BitSet(new long[]{0x0000000000001000L});
    public static final BitSet FOLLOW_TO_in_technique170 = new BitSet(new long[]{0x0000000000002000L});
    public static final BitSet FOLLOW_FIND_in_technique172 = new BitSet(new long[]{0x0000000000000100L,0x0000000000800000L});
    public static final BitSet FOLLOW_listClasses_in_technique174 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_USING_in_technique191 = new BitSet(new long[]{0x0000000003800000L});
    public static final BitSet FOLLOW_mlTech_in_technique193 = new BitSet(new long[]{0x0000000000010000L});
    public static final BitSet FOLLOW_TRAINED_in_technique195 = new BitSet(new long[]{0x0000000000020000L});
    public static final BitSet FOLLOW_WITH_in_technique197 = new BitSet(new long[]{0x0000000000000800L});
    public static final BitSet FOLLOW_STRING_in_technique199 = new BitSet(new long[]{0x0000000000001000L});
    public static final BitSet FOLLOW_TO_in_technique201 = new BitSet(new long[]{0x0000000000002000L});
    public static final BitSet FOLLOW_FIND_in_technique203 = new BitSet(new long[]{0x0000000000000100L,0x0000000000800000L});
    public static final BitSet FOLLOW_listClasses_in_technique205 = new BitSet(new long[]{0x0000000004000002L});
    public static final BitSet FOLLOW_features_in_technique207 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_USING_in_technique221 = new BitSet(new long[]{0x0000000000000020L});
    public static final BitSet FOLLOW_CLASSIFICATION_in_technique223 = new BitSet(new long[]{0x0000000000000040L});
    public static final BitSet FOLLOW_MODEL_in_technique225 = new BitSet(new long[]{0x0000000000040000L});
    public static final BitSet FOLLOW_UNION_in_technique227 = new BitSet(new long[]{0x0000000000000100L});
    public static final BitSet FOLLOW_listClassifiers_in_technique229 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_GENERIC_NAME_in_listClassifiers242 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_GENERIC_NAME_in_listClassifiers252 = new BitSet(new long[]{0x0000000000080000L});
    public static final BitSet FOLLOW_COMMA_in_listClassifiers254 = new BitSet(new long[]{0x0000000000000100L});
    public static final BitSet FOLLOW_listClassifiers_in_listClassifiers256 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_CASE_in_caseSelection268 = new BitSet(new long[]{0x0000000000600000L});
    public static final BitSet FOLLOW_SENSITIVE_in_caseSelection272 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_INSENSITIVE_in_caseSelection279 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_listNames_in_listClasses292 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_87_in_listClasses298 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_GENERIC_NAME_in_listNames312 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_GENERIC_NAME_in_listNames321 = new BitSet(new long[]{0x0000000000080000L});
    public static final BitSet FOLLOW_COMMA_in_listNames323 = new BitSet(new long[]{0x0000000000000100L});
    public static final BitSet FOLLOW_listNames_in_listNames325 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_MEMM_in_mlTech338 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_CRF_in_mlTech348 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_SVM_in_mlTech358 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_CAPTURING_in_features370 = new BitSet(new long[]{0x0000000008000000L});
    public static final BitSet FOLLOW_FEATURES_in_features372 = new BitSet(new long[]{0x0000006B00104020L});
    public static final BitSet FOLLOW_listFeatures_in_features374 = new BitSet(new long[]{0x0000000010000002L});
    public static final BitSet FOLLOW_IN_in_features377 = new BitSet(new long[]{0x0000000020000000L});
    public static final BitSet FOLLOW_WINDOW_in_features379 = new BitSet(new long[]{0x0000000000020000L});
    public static final BitSet FOLLOW_WITH_in_features381 = new BitSet(new long[]{0x0000000040000000L});
    public static final BitSet FOLLOW_RADIUS_in_features383 = new BitSet(new long[]{0x0000000080000000L});
    public static final BitSet FOLLOW_NUMBER_in_features385 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_feature_in_listFeatures399 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_feature_in_listFeatures411 = new BitSet(new long[]{0x0000000000080000L});
    public static final BitSet FOLLOW_COMMA_in_listFeatures413 = new BitSet(new long[]{0x0000006B00104020L});
    public static final BitSet FOLLOW_listFeatures_in_listFeatures415 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_CLASSIFICATION_in_feature424 = new BitSet(new long[]{0x0000000000000040L});
    public static final BitSet FOLLOW_MODEL_in_feature426 = new BitSet(new long[]{0x0000000000000100L});
    public static final BitSet FOLLOW_GENERIC_NAME_in_feature428 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_CORPUS_in_feature438 = new BitSet(new long[]{0x0000000000000020L});
    public static final BitSet FOLLOW_CLASSIFICATION_in_feature440 = new BitSet(new long[]{0x0000000000000100L});
    public static final BitSet FOLLOW_GENERIC_NAME_in_feature442 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_SUBSTRING_in_feature452 = new BitSet(new long[]{0x0000000400000000L});
    public static final BitSet FOLLOW_FROM_in_feature454 = new BitSet(new long[]{0x0000000080000000L});
    public static final BitSet FOLLOW_NUMBER_in_feature458 = new BitSet(new long[]{0x0000000000001000L});
    public static final BitSet FOLLOW_TO_in_feature460 = new BitSet(new long[]{0x0000000080000000L});
    public static final BitSet FOLLOW_NUMBER_in_feature464 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_DICTIONARY_in_feature477 = new BitSet(new long[]{0x0000000000000800L});
    public static final BitSet FOLLOW_STRING_in_feature479 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_MATCH_in_feature492 = new BitSet(new long[]{0x0000000000000800L});
    public static final BitSet FOLLOW_STRING_in_feature494 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_CASE_in_feature508 = new BitSet(new long[]{0x0000000000200000L});
    public static final BitSet FOLLOW_SENSITIVE_in_feature510 = new BitSet(new long[]{0x0000001000000000L});
    public static final BitSet FOLLOW_VALUE_in_feature512 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_CASE_in_feature527 = new BitSet(new long[]{0x0000000000400000L});
    public static final BitSet FOLLOW_INSENSITIVE_in_feature529 = new BitSet(new long[]{0x0000001000000000L});
    public static final BitSet FOLLOW_VALUE_in_feature531 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_SIZE_in_feature546 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_CHARACTER_in_feature563 = new BitSet(new long[]{0x0000008000000000L});
    public static final BitSet FOLLOW_PATTERN_in_feature565 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_CHARACTER_in_feature580 = new BitSet(new long[]{0x0000010000000000L});
    public static final BitSet FOLLOW_TYPE_in_feature582 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_CLASSIFY_in_classify603 = new BitSet(new long[]{0x0000000000000100L,0x0000000000800000L});
    public static final BitSet FOLLOW_listClasses_in_classify605 = new BitSet(new long[]{0x0000000400000000L});
    public static final BitSet FOLLOW_FROM_in_classify609 = new BitSet(new long[]{0x0000000000000800L});
    public static final BitSet FOLLOW_STRING_in_classify611 = new BitSet(new long[]{0x0000000000000200L});
    public static final BitSet FOLLOW_USING_in_classify615 = new BitSet(new long[]{0x0000000000000100L});
    public static final BitSet FOLLOW_GENERIC_NAME_in_classify617 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_EVALUATE_in_evaluate627 = new BitSet(new long[]{0x0000000000000020L});
    public static final BitSet FOLLOW_CLASSIFICATION_in_evaluate629 = new BitSet(new long[]{0x0000080000000000L});
    public static final BitSet FOLLOW_OF_in_evaluate631 = new BitSet(new long[]{0x0000000000000100L,0x0000000000800000L});
    public static final BitSet FOLLOW_listClasses_in_evaluate633 = new BitSet(new long[]{0x0000000400000000L});
    public static final BitSet FOLLOW_FROM_in_evaluate637 = new BitSet(new long[]{0x0000000000000800L});
    public static final BitSet FOLLOW_STRING_in_evaluate639 = new BitSet(new long[]{0x0000000000000200L});
    public static final BitSet FOLLOW_USING_in_evaluate643 = new BitSet(new long[]{0x0000000000000100L});
    public static final BitSet FOLLOW_GENERIC_NAME_in_evaluate645 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_SET_in_setBeginTag658 = new BitSet(new long[]{0x0000200000000000L});
    public static final BitSet FOLLOW_BEGIN_in_setBeginTag660 = new BitSet(new long[]{0x0000400000000000L});
    public static final BitSet FOLLOW_TAG_in_setBeginTag662 = new BitSet(new long[]{0x0000000000000800L});
    public static final BitSet FOLLOW_STRING_in_setBeginTag664 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_SET_in_setEndTag676 = new BitSet(new long[]{0x0000800000000000L});
    public static final BitSet FOLLOW_END_in_setEndTag678 = new BitSet(new long[]{0x0000400000000000L});
    public static final BitSet FOLLOW_TAG_in_setEndTag680 = new BitSet(new long[]{0x0000000000000800L});
    public static final BitSet FOLLOW_STRING_in_setEndTag682 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_SET_in_setDocPerFile694 = new BitSet(new long[]{0x0001000000000000L});
    public static final BitSet FOLLOW_DOCUMENT_in_setDocPerFile696 = new BitSet(new long[]{0x0002000000000000L});
    public static final BitSet FOLLOW_STYLE_in_setDocPerFile698 = new BitSet(new long[]{0x0004000000000000L});
    public static final BitSet FOLLOW_documentStyle_in_setDocPerFile700 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ONE_in_documentStyle710 = new BitSet(new long[]{0x0001000000000000L});
    public static final BitSet FOLLOW_DOCUMENT_in_documentStyle712 = new BitSet(new long[]{0x0008000000000000L});
    public static final BitSet FOLLOW_PER_in_documentStyle714 = new BitSet(new long[]{0x0010000000000000L});
    public static final BitSet FOLLOW_LINE_in_documentStyle716 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ONE_in_documentStyle723 = new BitSet(new long[]{0x0001000000000000L});
    public static final BitSet FOLLOW_DOCUMENT_in_documentStyle725 = new BitSet(new long[]{0x0008000000000000L});
    public static final BitSet FOLLOW_PER_in_documentStyle727 = new BitSet(new long[]{0x0020000000000000L});
    public static final BitSet FOLLOW_FILE_in_documentStyle729 = new BitSet(new long[]{0x0000000000000002L});

}